#!/bin/bash

###  IniciarT ###
       
#Claves de configuraciones
CLAVE_CONFIGURACION_GRUPO=GRUPO
CLAVE_CONFIGURACION_ARRIDIR=ARRIDIR
CLAVE_CONFIGURACION_RECHDIR=RECHDIR
CLAVE_CONFIGURACION_BINDIR=BINDIR
CLAVE_CONFIGURACION_MAEDIR=MAEDIR
CLAVE_CONFIGURACION_REPODIR=REPODIR
CLAVE_CONFIGURACION_LOGDIR=LOGDIR
CLAVE_CONFIGURACION_LOGEXT=LOGEXT
CLAVE_CONFIGURACION_LOGSIZE=LOGSIZE
CLAVE_CONFIGURACION_DATASIZE=DATASIZE

#--------------------------------------------------------------------------------------------------------------------
# Funciòn para buscar el PATH del grupo 
#--------------------------------------------------------------------------------------------------------------------
function chequear_path
{
    CURRENTDIR=`pwd`
    #RUTA=${CURRENTDIR%%grupo01/*}
    RUTA=`echo $PWD | sed 's/grupo01\/.*$/grupo01\//'`
    return 0
    #if [[ "$CURRENTDIR" =~ $GRUPODIR ]]
    #then
		#echo -en "\n\n\n\nENTRO ACACACAACACA\n\n\n\n"
         #RUTA="${BASH_REMATCH[1]}"
         #RUTA="${CURRENTDIR%%grupo01/*}"
         #export RUTA
         #return 0
    #else
     #    return 1;
    #fi;
}

#--------------------------------------------------------------------------------------------------------------------
# Funciòn que toma, variables-rutas del archivo de configuracion
#-------------------------------------------------------------------------------------------------------------------- 
# $1 = archivo configuracion
function leer_variables
{
   ERROR="no"
   #Obtiene variable GRUPO desde archivo conf
   GRUPO=`cat "$1" | grep $CLAVE_CONFIGURACION_GRUPO | cut -d= -f 2`
   if [ -z "$GRUPO" ]
   then
           ERROR="si"
   fi
   #Obtiene variable ARRIDIR desde archivo conf
   ARRIDIR=`cat "$1" | grep $CLAVE_CONFIGURACION_ARRIDIR | cut -d= -f 2`
   if [ -z "$ARRIDIR" ]
   then
           ERROR="si"
   fi  
   #Obtener variable RECHDIR desde archivo conf
   RECHDIR=`cat "$1" | grep $CLAVE_CONFIGURACION_RECHDIR | cut -d= -f 2`
   if [ -z "$RECHDIR" ]
   then
           ERROR="si"
   fi
   #Obtener variable BINDIR desde archivo conf
   BINDIR=`cat "$1" | grep $CLAVE_CONFIGURACION_BINDIR | cut -d= -f 2` 
   if [ -z "$BINDIR" ]
   then
           ERROR="si"
   fi
   #Obtener variable MAEDIR desde archivo conf
   MAEDIR=`cat "$1" | grep $CLAVE_CONFIGURACION_MAEDIR | cut -d= -f 2`
   if [ -z "$MAEDIR" ]
   then 
           ERROR="si"
   fi
   #Obtener variable REPODIR desde archivo conf
   REPODIR=`cat "$1" | grep $CLAVE_CONFIGURACION_REPODIR | cut -d= -f 2`
   if [ -z "$REPODIR" ]
   then
           ERROR="si"
   fi
   #Obtener variable LOGDIR desde archivo conf  
   LOGDIR=`cat "$1" | grep $CLAVE_CONFIGURACION_LOGDIR | cut -d= -f 2`
   if [ -z "$LOGDIR" ]
   then
           ERROR="si"
   fi
   #Obtener variable LOGEXT desde archivo conf
   LOGEXT=`cat "$1" | grep $CLAVE_CONFIGURACION_LOGEXT | cut -d= -f 2`
   if [ -z "$LOGEXT" ]
   then
           ERROR="si"
   fi
   #Obtener variable LOGSIZE desde archivo con
   LOGSIZE=`cat "$1" | grep $CLAVE_CONFIGURACION_LOGSIZE | cut -d= -f 2`
   if [ -z "$LOGSIZE" ]
   then
           ERROR="si"
   fi
   #Obtener variable DATASIZE desde archivo conf
   DATASIZE=`cat "$1" | grep $CLAVE_CONFIGURACION_DATASIZE | cut -d= -f 2`
   if [ -z "$DATASIZE" ]
   then
           ERROR="si"
   fi
   #Directorio de las instlaaciones recibidas
   INSTRECI="$RUTA""inst_recibidas/"
   #Directorio de las instalaciones ordenadas
   INSTORDE="$RUTA""inst_ordenadas/"
   #Directorio de las Instalaciones rechazadas
   INSTRECH="$RUTA""inst_rechazadas/"
   #Directorio de las Instalaciones Procesadas
   INSTPROC="$RUTA""inst_procesadas/"
   #Directorio de los parques Instalados
   INSTPARQUE="$RUTA""parque_instalado/"
}

#--------------------------------------------------------------------------------------------------------------------
# Funcion que muestra directorios al usuario
#-------------------------------------------------------------------------------------------------------------------- 
function mensaje_directorios
{  
   echo "Directorio de arribo de archivos externos: ARRIDIR"
   echo "  $ARRIDIR"
   echo " "
   echo "Directorio de grabaciòn de los archivos externos rechazados: RECHDIR"
   echo "  $RECHDIR" 
   echo " "
   echo "Directorio de grabaciòn de los logs de auditoria: LOGDIR"
   echo "  $LOGDIR"
   echo " "
   echo "Directorio de grabaciòn de los reportes de salida: REPODIR"
   echo "  $REPODIR"
   echo " "
   echo "Extensiòn del LOG: LOGEXT = $LOGEXT"
   echo " "
   echo "Tamaño del LOG: LOGSIZE = $LOGSIZE"
   echo " "
   echo "Tamaño de los datos: DATASIZE = $DATASIZE"
   echo " "
   echo "Directorio de las instalaciones recibidas: INSTRECI"
   echo "  $INSTRECI"
   echo " " 
   echo "Directorio de las instalaciones rechazadas: INSTRECH"
   echo "  $INSTRECH"
   echo " "
   echo "Directorio de las instalaciones ordenadas: INSTORDE"
   echo "  $INSTORDE"
   echo " "
   echo "Directorio de las instalaciones procesadas: INSTPROC"
   echo "  $INSTPROC"
   echo " "
   echo "Directorio de los parques instalados: INSTPARQUE"
   echo "  $INSTPARQUE"

}
#--------------------------------------------------------------------------------------------------------------------
# Funcion que muestra Mensaje inicial al usuario
#-------------------------------------------------------------------------------------------------------------------- 
function mensaje_inicial
{  
   echo "###############################################################" 
   echo "##          TP SO-7508 1mer cuatrimestre 2012.               ##"
   echo "##           Tema T Copyright Grupo 01                       ##"     
   echo "###############################################################" 
   echo " "
   echo "Libreria del Sistema: $archivo_conf"
}

#--------------------------------------------------------------------------------------------------------------------
# Funcion que muestra ubicacion de directorios BINDIR y MAEDIR y su contenido
#-------------------------------------------------------------------------------------------------------------------- 
function mensaje_directorio_archivos
{ 
   echo " " 
   echo "Componentes existentes:"
   echo " " 
   echo "Directorio de instalaciòn  de los ejecutables: BINDIR"
   echo "  $BINDIR"
   ls "$BINDIR"
   echo " " 
   echo "Directorio de instalaciòn de los archivos maestros: MAEDIR"
   echo "  $MAEDIR"
   ls "$MAEDIR"
   echo " "
}
#--------------------------------------------------------------------------------------------------------------------
# Funcion que chequea si el directorio BINDIR tiene todos los componentes necesarios para iniciar
#-------------------------------------------------------------------------------------------------------------------- 
function chequeo_componentes
{  
   COMPONENTES_FALTANTES="no"
   echo "Componentes Faltantes:"
   # Busca si hay componentes faltantes:
   PRODUCTOS=`find "$MAEDIR" \( -name "prod.mae" \)`
   if [ -z "$PRODUCTOS" ]
   then
      echo "*   MAEDIR/prod.mae"
      COMPONENTES_FALTANTES="si"
   fi
   SUCURSALES=`find "$MAEDIR" \( -name "sucu.mae" \)`
   if [ -z "$SUCURSALES" ]
   then
      echo "*   MAEDIR/sucu.mae"
      COMPONENTES_FALTANTES="si"
   fi
   CLIENTES=`find "$MAEDIR" \( -name "cli.mae" \)`
   if [ -z "$CLIENTES" ]
   then
     echo "*   MAEDIR/cli.mae"
     COMPONENTES_FALTANTES="si"
   fi
   LOGUEART=`find "$BINDIR" \( -name "LoguearT.pl" \)`
   if [ -z "$LOGUEART" ]
   then
     echo "*   BINDIR/LoguearT.pl"
     COMPONENTES_FALTANTES="si"
   fi
   MIRART=`find "$BINDIR" \( -name "MirarT.pl" \)`
   if [ -z "$MIRART" ]
   then
     echo "*   BINDIR/MirarT.sh"
     COMPONENTES_FALTANTES="si"
   fi
   MOVERT=`find "$BINDIR" \( -name "MoverT.sh" \)`
   if [ -z "$MOVERT" ]
   then
     echo "*   BINDIR/MoverT.sh"
     COMPONENTES_FALTANTES="si"
   fi
 #  INSTALART=`find "$BINDIR" \( -name "InstalarT.sh" \)`
 #  if [ -z "$INSTALART" ]
 #  then
 #    echo "*   BINDIR/InstalarT.sh"
 #    COMPONENTES_FALTANTES="si"
 #  fi
   DETECTART=`find "$BINDIR" \( -name "DetectarT.sh" \)`
   if [ -z "$DETECTART" ]
   then
     echo "*   BINDIR/DetectarT.sh"
     COMPONENTES_FALTANTES="si"
   fi   
   GRABARPARQUET=`find "$BINDIR" \( -name "GrabarParqueT.sh" \)`
   if [ -z "$GRABARPARQUET" ]
   then
     echo "*   BINDIR/GrabarParqueT.sh"
     COMPONENTES_FALTANTES="si"  
   fi
   LISTART=`find "$BINDIR" \( -name "ListarT.pl" \)`
   if [ -z "$LISTART" ]
   then
     echo "*   BINDIR/ListarT.pl"
     COMPONENTES_FALTANTES="si"
   fi
   STOPD=`find "$BINDIR" \( -name "StopD.sh" \)`
   if [ -z "$STOPD" ]
   then
     echo "*   BINDIR/StopD.sh"
     COMPONENTES_FALTANTES="si"
   fi
   STARTD=`find "$BINDIR" \( -name "StartD.sh" \)`
   if [ -z "$STARTD" ]
   then
     echo "*   BINDIR/StartD.sh"
     COMPONENTES_FALTANTES="si"
   fi 
   VALIDARFECHAFORMATO=`find "$BINDIR" \( -name "ValidarFechaFormato.sh" \)`
   if [ -z "$VALIDARFECHAFORMATO" ]
   then
     echo "*   BINDIR/ValidarFechaFormato.sh"
     COMPONENTES_FALTANTES="si"
   fi 
   VALIDARFECHA=`find "$BINDIR" \( -name "ValidarFecha.sh" \)`
   if [ -z "$VALIDARFECHA" ]
   then
     echo "*   BINDIR/ValidarFecha.sh"
     COMPONENTES_FALTANTES="si"
   fi 
   echo " "
   
   if [ "$COMPONENTES_FALTANTES" = "no" ]
   then
     echo "      NO HAY"
     echo " "
   fi

}
#--------------------------------------------------------------------------------------------------------------------
# Funcion que chequea si el directorio BINDIR tiene todos los componentes necesarios para iniciar
#-------------------------------------------------------------------------------------------------------------------- 
function seteoVariables
{
   # seteo PATH
   PATH="$PATH:$BINDIR"
   # seteo Variables
   export PATH 
   export GRUPO;
   export ARRIDIR;
   export RECHDIR;
   export BINDIR;
   export MAEDIR;
   export REPODIR;
   export LOGDIR;
   export LOGEXT;
   export LOGSIZE;
   export DATASIZE;
   export INSTRECI 
   export INSTORDE
   export INSTRECH
   export INSTPROC 
   export INSTPARQUE
}

#Fin de las funciones

############################################################################
###                   INICIAR T - SCRIP PRINCIPAL                    #######
############################################################################

#
#Verificar que ya no se haya ejecutado IniciarT
#
echo "$INICIART_INICIALIZADO"
if [ -z "$INICIART_INICIALIZADO" -o "no" = "$INICART_INICIALIZADO" ]
then
   
   GRUPODIR="(.*/grupo01/)(.*)*"
   RUTA=""
   #Busca ruta hasta grupo01/
   chequear_path

   # Obtengo el archivo de configuraciòn
   archivo_conf="$RUTA""confdir/InstalarT.conf"
   #Valida existencia de archivo de configuraciòn
   if ! [ -f "$archivo_conf" ]
   then
      echo "ERROR: Archivo de Configuraciòn No encontrado - $archivo_conf"
      exit 1
   fi

   #Leer directorios - rutas del archivo de configuracion
   leer_variables "$archivo_conf"
   if [ $ERROR = "si" ]
   then
      echo "ERROR: Archivo de conf Incompleto"
      exit 2
   fi
   
   seteoVariables 
   #
   #Iniciliza los mensajes del log
   #
   . CargarMensajes.sh
   #
   #Iniciliza el log IniciarT 
   #
   LoguearT.pl "IniciarT" "I" "$INICIART_INI" "IniciarT"
   
   # mensajes al usuario:
   mensaje_inicial
   #Mensajes de directorios
   mensaje_directorios
   mensaje_directorio_archivos    
   
   #Chequea que esten todos los componentes 
   chequeo_componentes
 
   if [ "si" = "$COMPONENTES_FALTANTES" ]
   then
        mensaje_log=`echo "$ESTADO_SIS" | sed 's/&1/"PENDIENTE DE INSTALACION"/g'`
        echo " "
        echo "$mensaje_log"
	#"Estado del Sistema: PENDIENTE DE INSTALACION"
        LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT"
        mensaje_log=`echo "$PROCESO_INIT" | sed 's/&1/"CANCELADO"/g'`
	echo " "
 	echo "$mensaje_log"
        #"Proceso de Inicializacion CANCELADO."
        LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT"  
   else
	   
           #El sistema quedo inicializado
	   INICIART_INICIALIZADO="si"
	   export INICIART_INICIALIZADO

	   mensaje_log=`echo "$ESTADO_SIS" | sed 's/&1/"INICIALIZADO"/g'`
	   echo " "
	   echo "$mensaje_log"
	   #"Estado del Sistema: INICIALIZADO"
	   LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT" 
	   fi
   
else
   #El sistema estaba inicializado --> muestra mensajes a usuarios
   mensaje_inicial
   mensaje_directorios
   mensaje_directorio_archivos
   
   mensaje_log=`echo "$ESTADO_SIS" | sed 's/&1/"INICIALIZADO"/g'`
   echo " "
   echo "$mensaje_log"
   #"Estado del Sistema: INICIALIZADO"
   LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT" 
   echo " "
   echo "$NO_INIT_POSIBLE" #"No es posible efectuar una reinicializaciòn del sistema."
   LoguearT.pl "IniciarT" "I" "$NO_INIT_POSIBLE" "IniciarT" 

   mensaje_log=`echo "$PROCESO_INIT" | sed 's/&1/"CANCELADO"/g'`
   echo " "
   echo "$mensaje_log" #"Proceso de Inicializacion CANCELADO."
   LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT"  
fi

if [ -z "$COMPONENTES_FALTANTES" -o "no" = "$COMPONENTES_FALTANTES" ]
then
	# Invocacion al scrip DetectarT
	comandoEjecutar="DetectarT"

	#
	#Verifica si el comando a iniciar ya se encuentra en ejecucion, caso contrario lo invoca
	#
	pid=`ps ax | grep $comandoEjecutar | grep -v grep | awk '{print $1}'`
	if [ -z $pid ]
	then
	     StartD.sh
	     pid=`ps ax | grep $comandoEjecutar | grep -v grep | awk '{print $1}'`
	fi
	mensaje_log=`echo "$DAEMON_RUN_NUM" | sed "s/&1/$pid /g"`
	echo " "  
	echo "$mensaje_log" #"Demonio corriendo bajo el Nro: $pid"
	LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT" 

	mensaje_log=`echo "$PROCESO_INIT" | sed 's/&1/"CONCLUIDO"/g'`
	echo " "
	echo "$mensaje_log" #"Proceso de Inicializacion CONCLUIDO."
	LoguearT.pl "IniciarT" "I" "$mensaje_log" "IniciarT"  
fi
